package service.impl;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import dao.FileClassDao;
import dao.impl.FileClassDaoImpl;
import domian.FileClass;
import domian.FileClassName;
import redis.clients.jedis.Jedis;
import service.FileClassService;
import service.FileClassService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FileClassServiceImpl implements FileClassService {

    FileClassDao fileClassDao = new FileClassDaoImpl();
    @Override
    public List<FileClass> findAllFileClass() {
        return fileClassDao.findAllFileClass();
    }


    @Override
    public List<FileClassName> findTitle() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        Jedis jedis = new Jedis();
        //从缓存中获取数据
        String fileClass1 = jedis.get("fileClass");
        if (fileClass1!=null){
            System.out.println(fileClass1);
            List<FileClassName> list = objectMapper.readValue(fileClass1, List.class);
            return list;
        }
        //用于返回的集合
        List<FileClassName> list = new ArrayList<>();
        //查询到所有的文件标题
        List<FileClass> all = fileClassDao.findAllFileClass();

        //将一级标题查出
        List<FileClass> fileOne = new ArrayList<>();
        for (FileClass fileClass : all) {
            if (fileClass.getF_cid() == 0){
                fileOne.add(fileClass);
            }
        }

        //分类出二级标题
        FileClassName fcn = null;
        List<FileClass> fileTwo = null;
        for (FileClass fileClass : fileOne) {
            //存放二级标题的集合
            fileTwo = new ArrayList<>();
            //一级标题id，根据他它找到它所对应的二级标题
            Integer id = fileClass.getId();
            for (FileClass aClass : all) {
                if (aClass.getF_cid().equals(id)){
                    fileTwo.add(aClass);
                }
            }

            fcn = new FileClassName(fileClass,fileTwo);
            list.add(fcn);
        }

        //将查询后的 数据存入redis中
        String fileClass = objectMapper.writeValueAsString(list);
        jedis.set("fileClass",fileClass);
        jedis.expire("fileClass",60*60*12);
        return list;
    }
}
